package com.nuc.zyt.framework.context.support;

import com.nuc.zyt.framework.beans.factory.support.BeanDefinitionReader;
import com.nuc.zyt.framework.beans.factory.support.BeanDefinitionRegistry;
import com.nuc.zyt.framework.context.ApplicationContext;

import java.util.HashMap;
import java.util.Map;

/**
 * @ClassName AbstractApplicationContext
 * @Description 抽象子类，用于立即加载
 * @Author 耀酱
 * @Date 2023/6/5 20:17
 * @Version 1.0
 */

public abstract class AbstractApplicationContext implements ApplicationContext {

    protected BeanDefinitionReader beanDefinitionReader; // 解析配置文件接口
    protected Map<String,Object> singletonObjects = new HashMap<>();

    protected String configLocation;

    // 创建对象模板方法
    @Override
    public void refresh() throws Exception {
        // 加载bean对象
        beanDefinitionReader.loadBeanDefinition(configLocation);
        // 初始化bean
        finishBeanInitialization();

    }

    private void finishBeanInitialization() throws Exception{
        BeanDefinitionRegistry registry = beanDefinitionReader.getRegistry(); // 得到包含所有bean信息的map结构,可以理解为得到容器

        String[] beanNames = registry.getBeanDefinitionNames(); // 得到所有bean的名字集合

        // 初始化
        for (String beanName : beanNames) {
            getBean(beanName); // 调用方法初始化
        }

    }
}
